People using computers often work on multiple tasks and activities, sometimes in parallel or in rapid succession. For example, a user might need to perform one task of making travel arrangements while intermittently performing another task of coding and testing a programming project. To accomplish these unrelated tasks, the user might need to use one set of windows (e.g., web browser window, email client window, spreadsheet window) for the first task and use another set of windows for the second task (e.g., editor window, debugger window, design document window). Switching back and forth between the two tasks can be burdensome; different windows may need to be activated, minimized/maximized, rearranged, etc. In sum, a user may have to frequently manage different sets of system objects (e.g., windows, user interface elements, etc.) that are needed to perform different corresponding tasks.
Efforts have been made to reduce or eliminate this task of managing tasks. Task management systems have been developed to help reduce the effort needed by a user to manage multiple computing tasks. Specifically, task management systems have been developed to facilitate fast switching between tasks, fast resumption of tasks, automatic identification of tasks, and so on. To these ends, various solutions have been considered, such as virtual desktop managers, extensions of the user's desktop with peripheral low-resolution screen space, three dimensional desktop managers, zoomable interfaces, tiled window managers, bumping away irrelevant windows, using a central focus region and a peripheral region for unused windows, enhanced taskbars, and so on. Similar application—specific systems have also been used to help users manage their tasks within a particular application, such as email.
To facilitate task management and in particular task switching, previous task management systems have generally required knowledge of how a user's overall workspace is conceptually partitioned into individual tasks. That is, a basic problem with task management is how to determine which objects (windows, documents, applications, etc.) are associated with each task or working context. This is sometimes referred to as the task assignment problem. Most task management systems rely on explicit user input for such knowledge, despite the extra effort this imposes on a user. There has been little effort toward automatic detection and recognition of a user's tasks, perhaps because of the difficulty of this approach. For example, it can be difficult for a task management system to know whether a newly opened window is part of the current working context, the start of a new working context, or a signal to shift to some other existing working context. There is a need for mechanisms that improve the ability to manage computing tasks.